package com.quectel.constant.core.partybuilding;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 在这里编写说明
 *
 * @author: bob
 * @email: bob.yu@quectel.com
 * @date: 2023-06-01 15:09:00
 */
public class PartyBuildingMeetingConstants {

    public static final String JOIN_STATUS = "joinStatus";

    @AllArgsConstructor
    public enum CategoryEnum {
        /**
         * 三会一课
         */
        THREE_MEETINGS_ONE_LESSON((byte) 1),

        /**
         * 主题党日
         */
        THEME_PARTY_DAY((byte) 2),

        /**
         * 组织生活会
         */
        PARTY_LIFE_MEETING((byte) 3),
        ;

        @Getter
        private final Byte category;
    }

    @AllArgsConstructor
    public enum RemindType{

        /**
         * 0 不提醒
         */
        NO_NEED((byte)0, 0),

        /**
         * 1 即时提醒
         */
        INSTANT_REMINDER((byte)1, 0),

        /**
         * 2  提前15分钟
         */

        BEFORE_STARTING_FIFTEEN_MINUTE((byte)2, 15),

        /**
         * 3 提前30分钟
         */
        BEFORE_STARTING_THIRTY_MINUTE((byte)3, 30),

        /**
         * 4 提前60分钟
         */
        BEFORE_STARTING_ONE_HOUR((byte)4, 60),

        /**
         * 5 提前24小时
         */
        BEFORE_STARTING_ONE_DAY((byte)5, 1440),


        /**
         * 6 提前48小时
         */
        BEFORE_STARTING_TWO_DAY((byte)6,2880),

        ;


        @Getter
        private final Byte type;

        @Getter
        private final Integer offsetTime;

        public static PartyBuildingMeetingConstants.RemindType getByType(Byte type){
            for (PartyBuildingMeetingConstants.RemindType remindType : PartyBuildingMeetingConstants.RemindType.values()){
                if(remindType.getType().equals(type)){
                    return remindType;
                }
            }
            return null;
        }
    }

    @AllArgsConstructor
    public enum JoinStatus{
        /**
         * 报名
         */
        NO_JOIN((byte)0),

        JOIN((byte)1);

        @Getter
        private final Byte status;
    }

    @AllArgsConstructor
    public enum SignStatus{
        /**
         * 活动签到状态
         */
        NO_SIGN((byte)0),

        SIGN((byte)1);

        @Getter
        private final Byte status;
    }

    @AllArgsConstructor
    public enum MeetingStatus{
        /**
         * 党建活动相关状态
         * 未发布
         * 未开始
         * 进行中
         * 已结束
         * 取消
         */
        UNPUBLISHED((byte)0),

        NOT_BEGIN((byte)1),

        DOING((byte)2),

        IS_END((byte)3),

        CANCEL((byte)4);

        @Getter
        private final Byte status;
    }


    /**
     *
     * @param type 传入推送时间类型 remind_type
     * @return 单位：分钟
     */
    public static Integer getOffsetTimeByType(Byte type) {
        for (PartyBuildingMeetingConstants.RemindType remindType : PartyBuildingMeetingConstants.RemindType.values()) {
            if (remindType.getType().equals(type)) {
                return remindType.getOffsetTime();
            }
        }
        return null;
    }

}
